﻿<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Role_Add.aspx.cs" Inherits="JKF.Web.Sys.Role.Role_Add" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>角色添加页面</title>
        <%= RegScript("~/js/jquery.1.5.js")%>
        <%= RegScript("~/js/jquery.js")%> 
        <%=RegScript("~/js/Common.js")%>
        <%=RegScript("~/js/jquery.json.js")%>
        <%=RegScript("~/js/jquery.nhis.js")%>
        <%=RegScript("~/js/jquery.rchis.js")%>
        <%=RegScript("~/js/jquery.validate.js")%>
        <%=RegScript("~/js/DatePicker/WdatePicker.js")%>
        <%=RegStyle("~/js/suggest/jquery.suggest.css")%>
        <%--<%=this.RegStyle("~/App_Themes/Theme1/common.css")%>--%>
        <%= RegScript("~/js/jquery-ui-custom.min.js")%>
         <link href="/js/JQueryzTreev3.5/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />
    <link href="/App_Themes/Theme2/Include.css"   rel="stylesheet" type="text/css" />
    <script src="/js/Uppop/tipswindown2.js"  type="text/javascript"></script> 
    <script src="/js/JQueryzTreev3.5/js/jquery.ztree.all-3.5.min.js" type="text/javascript"></script>
     
     <style type="text/css">
    label
    {
    	color:Black;
    }
    .showMsg
    {
    	color:Red;
    }
     
    </style> 
    <script type="text/javascript">
        var zTree;
        var treeNodes;
        //zTree基本设置
        var setting = {
            check: {
                enable: true,
                chkStyle: "checkbox",
                chkboxType: { "Y": "ps", "N": "ps" } 
            },
            data: {
                simpleData: { 
                    enable: true,
			        idKey: "MODULE_CODE",
			        pIdKey: "PID",
			        rootPId: 0
                },
			    key: {
			        name: "NAME"
			    } 
            },
            view: {
			dblClickExpand: true,
			showLine: true,
			selectedMulti: false 
		  }
};
        var isAdd = '<%=NoAddRedirect%>'  //没有权限跳转到提示页面
        var intSetTimeOutID; // 用于停止计时器
        var arrLinkBtn = new Array();
        arrLinkBtn.push(new Array('ClearRoleForm()', '继续添加')); //调用函数的参数要用双引号
        arrLinkBtn.push(new Array('parent.tipsWindown.close()', '返回列表'));
        var AppPath = "<%=AppPath %>";
        var handler = AppPath + '/do/Sys/SysRole.do';
        var scid = '<%=P("moduleKey") %>';
        var operationType = 'InsertRole'; // 操作类型
        var dateCreateGuid = '<%=Guid.NewGuid() %>'; //产生guid
        var ntEmpt = /^[^ ]+$/;
        var dtReg = /^\d{4}(\/|-)([1][0-2]|[1-9]|0[1-9])(\/|-)([1-2][0-9]|3[0-1]|[1-9]|0[1-9])( (0?[0-9]|1[0-9]|2[0-4])(:([0-5][0-9])){1,2})?$/;
        var ntmd5 = /^\w{8}-(\w{4}-){3}\w{12}$/;  // 校验MD5有效性
        var isTreeSucceed = false; // 记录权限树是否加载完毕
        var isChangeChecked = false; // 记录当加载权限树，并设置完对应角色权限时，看用户是否改变
        $(function () {
            check(); // 检查输入
            InitForm();
            //初始化树
            initTree();
            checkName(); // 检查角色名称
            $("#BtnSave").click(function () {
                saveModule();
                //tipsWindown.close();
            });
            $('#btnclose').click(function () {
                parent.tipsWindown.close();
            });
            if (ntEmpt.test(scid)) {
                //修改时，移除继续添加按钮
                arrLinkBtn.shift();
            } 
        });

        //初始化分类树
        function initTree() {
            $.post(handler, { ActionName: 'GetSysModule_ActionTree' }, function (rslt) {
                if (!rslt.Success) {
                    alert(rslt.Message);
                    return;
                }
                treeNodes = rslt.Data; //把后台封装好的简单Json格式赋给treeNodes
                //alert(data.length);   
                $.fn.zTree.init($("#ztree_category"), setting, treeNodes);
                //$.fn.zTree.getZTreeObj("ztree_category").expandNode(treeNodes[0], true, false); // 展开第一个
                isTreeSucceed = true; // 表示加载成功
                zTree = $.fn.zTree.getZTreeObj("ztree_category");
                var nodes = zTree.getNodes();
                for (var i = 0, l = nodes.length; i < l; i++) {
                    zTree.expandNode(nodes[i], true, false); // 展开第一级节点
                }
            }, 'json');

        }
        // 检查输入
        function check() {
            alxVr.push({ id: "ROLE_NAME",
                rule: function (jd) {
                    if (!ntEmpt.test(jd.val())) {
                        this.msg = "请输入角色名称."; return false;
                    } else if ($.FxNull(jd.val(), "").length > 50) {
                        this.msg = "角色名称不要超过50个字符"; return false;
                    } return true;
                }
            });
            alxVr.push({ id: "ztree_category", rule: function () {
                if (zTree.getCheckedNodes(true).length == 0) {
                    this.msg = "请选择模块权限."; return false;
                } return true;
              }
            });
            $.validateBind(); 
        }

        // 检查名称是否被占用
        function checkName() {
            $('#ROLE_NAME').blur(function () {
                var new_role_name = $(this).val();
                var old_role_name = $('#hidROLE_NAME').val(); // 原来的名称
                if (new_role_name.length > 0 && old_role_name != new_role_name) {
                    $.post(handler, { ActionName: 'CheckRoleName', ROLE_NAME: $(this).val() },
                     function (rslt) {
                         if (rslt.MessageCode == "Ok") {
                             if (rslt.Data) {
                                 $('#span_role_name').text('此名称已经存在,请重新输入！');
                                 // 禁用保存按钮
                                 $('#BtnSave').attr('disabled', 'disabled').attr('title', '按钮被禁用'); ;
                                 return false; // 表明已存在
                             }
                             $('#span_role_name').text('');
                             // 启用保存按钮
                             $('#BtnSave').removeAttr('disabled').attr('title', '按钮可用');
                             return true;
                         }
                         alert(rslt.Message);
                     }, 'json');
                } else if (new_role_name == old_role_name) { // 如果没有修改则恢复
                    $('#span_role_name').text('');
                    // 启用保存按钮
                    $('#BtnSave').removeAttr('disabled').attr('title', '按钮可用');
                }
            });

        }
        // 保存店面信息
        function saveModule() { 
            if (!$.validateAll()) {
                if ($(".alxv-failed").size() > 0) {
                    $(document).scrollTop($(".alxv-failed").eq(0).scrollTop());
                }
                return;
            };
            processEditorInsert(operationType);
        }
        //处理店面表的添加和修改
        function processEditorInsert(actionName) {
            /// <summary>处理店面表的添加和修改</summary>
            /// <param name="actionName" type="String">请求的ActionName</param>
            var tObj = {}, objCfg = {}, pName;
            // 1.获取左边角色名称
            $(":text,textarea").each(function () {
                pName = ($.FxNull($(this).attr("type"), "").toLowerCase() == "radio") ? $.FxNull($(this).attr("name"), "").toUpperCase() : $.FxNull($(this).attr("id"), "").toUpperCase();

                //构造js对象
                tObj[pName] = (objCfg[pName]) ? $.FxNull($(this).attr(objCfg[pName]), "") : $(this).val();
            });
            // 2. 获取右边权限树
            var check_nodes = zTree.getCheckedNodes(true); // 获取选中的
            var action_role_trees = new Array();
            var module_role_trees = new Array();
            for (var i = 0; i < check_nodes.length; i++) {
                if (check_nodes[i].level == 3) {
                    action_role_trees.push(check_nodes[i].KEY);
                } else { // 否则就是权限模块
                    module_role_trees.push(check_nodes[i].KEY);
                }
            }
            tObj.ROLE_ACTION = action_role_trees;
            tObj.ROLE_MODULE = module_role_trees;
            if (ntmd5.test(scid) && scid) {//主键
                tObj.ROLE_KEY = scid;
            }
            else if (scid == '') {
                tObj.ROLE_KEY = dateCreateGuid;
            } else {
                alert('不存在此记录');
                return false;
            } 
             
            if (isChangeChecked) { // 后台判断此值，如果没有变，则不去更新对应的role_module和role_action
                //alert('改变了');
                tObj.IsChangeRole_Module_Action = true;
            }
            else {
                //alert('没有变');
                tObj.IsChangeRole_Module_Action = false;
            } 
            $.post(handler, { ActionName: actionName, moduleObj: $.toJSON(tObj) }, function (rslt) {
                if (rslt.MessageCode == "Ok") {//保存成功 
                    //alert(rslt.Message);
                    scid = rslt.Data; //记录主键
                    var shopType = 'Edit';
                    if (actionName == 'InsertRole') {
                        shopType = 'Insert';
                    }
                    updateView(shopType); //添加或修改数据成功后更新列表页面
                    //parent.tipsWindown.close(); //  必须加上parent关闭,这样算是在Shop_View.aspx中执行
                    //top.$("#screenEdit").dialog("close"); 
                    $.popResultTip(rslt.Message, arrLinkBtn);
                    return;
                }
                alert(rslt.Message);
            }, "json");
        }
        //处理更新shop_view.aspx中表格显示 
        function updateView(shopType) {
            /// <summary>处理更新shop_view.aspx中表格显示</summary>
            /// <param name="shopType" type="String">添加还是修改</param>
            tr = $("<tr key=" + scid + "></tr>");

            $('<td width="100px"></td>').appendTo(tr).html('<input  class="common_btn_edit mr12"  type="button" onclick="addRole(' + "'" + scid + "'" + ')" /><input name="" type="button" class="common_btn_del mr12"  />');
            $('<td width="200px"></td>').appendTo(tr).text($("#ROLE_NAME").val());
            $('<td width="100px"></td>').appendTo(tr).text($("#ROLE_DESCRIPTON").val());
            if (shopType == 'Insert') {
                scid = "";
            }
            // 这样才是shop_view.aspx页面，因为此页面是在Shop_View.aspx中打开
            window.parent.popRetuInfo($(tr), scid);
        }
        // 如果是编辑某条记录时，先填写读取到的内容
        function InitForm() {
            if ($.FxNull(scid, "").length > 0) { //如果主键不为空，初始化信息
                operationType = 'EditRole'; // 当获取到的店面编号不为空，则表示是修改
                $.post(handler, { ActionName: "GetRoleByCode", moduleKey: $.FxNull(scid, "") },
                 function (ItemInfo) {
                     if (ItemInfo.MessageCode == "Ok") {
                         if (ItemInfo.Data == 'null') {
                             alert('无该角色信息或者参数错误');
                             return;
                         } else if (ItemInfo.Data) {
                             var item = ItemInfo.Data;
                             $('#hidROLE_NAME').val($.FxNull(item.ROLE_NAME, ""));
                             $("#ROLE_NAME").val($.FxNull(item.ROLE_NAME, ""));
                             $("#ROLE_DESCRIPTON").val($.FxNull(item.ROLE_DESCRIPTON, ""));
                             // 选中右边的权限树，等待树加载完毕后才能执行
                             var interID = setInterval(function () {
                                 if (isTreeSucceed) {
                                     // 设置相应的树check选中
                                     setRole_Module_ActionTree(ItemInfo.Data.ROLE_ACTION, ItemInfo.Data.ROLE_MODULE);
                                     // 权限树加载完毕后停止计时
                                     clearInterval(interID);
                                 }
                             }, 500);
                         }
                         return;
                     }
                     alert(ItemInfo.Message);
                 }, "json");
            }
         }
         // 当编辑时，设置相应权限
         function setRole_Module_ActionTree(role_action, role_module) { 
             var nodes = zTree.transformToArray(zTree.getNodes()); // 获取全部数据 
             for (var i = 0, l = nodes.length; i < l; i++) {
             // 先设置模块的选中状态
//                 for (var k = 0; k < role_module.length; k++) {
//                     if (nodes[i].KEY == role_module[k]) {
//                         zTree.checkNode(nodes[i], true, true);
//                     }
//                 } 
                 // 然后再设置操作的选中状态:由于树的上下级关系。所以，当选中了叶子节点，父节点也会选中
                 for (var j = 0; j < role_action.length; j++) {
                     if (nodes[i].KEY == role_action[j]) {
                         zTree.checkNode(nodes[i], true, true);
                     }
                 }
             }
             // 注册Check事件，以便判断用户是否修改权限树
             zTree.setting.callback.onCheck = function () { isChangeChecked = true; };
         }
         // 清空Clear表单
         function ClearRoleForm() {
             $('input[type=text]').val('');
             $('#hidROLE_NAME').val('null');
             $('textarea').val(''); // 清空文本区
             // 清空选择的checkbox
             zTree.checkAllNodes(false);
             // 如果是单击继续添加，则关闭弹出层
             $('#resultTipDiv').dialog('close');
             clearTimeout(intSetTimeOutID); // 停止计时器执行
         }
         //树的展开和收起
         function expandAll(isAll)
         {
             var treeObj = $.fn.zTree.getZTreeObj('ztree_category');
             if (isAll) {
                 treeObj.expandAll(true);
             } else {
                 treeObj.expandAll(false);
             } 
         }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div class="pop_logging_body" style="padding:22px 70px; margin-top:0px; margin-bottom:26px; margin-right:35px; margin-left:35px ">
      
    <table >
        <tr style="text-align: center;"> 
           <td  colspan="2" style="padding-right:50px;width:300px">
               <div class="common_search">
                     <div class="l_h45">  
                       <b> 基本信息  </b>
                     </div>
                </div>
           </td>
           <td colspan="2"  >
               <div class="common_search">
                     <div class="l_h45">  
                        <b>模块权限设置  </b>
                     </div>
                </div>
           </td>
        </tr>
        <tr><td colspan="4"><br /></td></tr>
        <tr>
            <td  align="right"><span class="f12red">*</span>角色名称：</td>
            <td><input type="text" value="" id="ROLE_NAME" maxlength="10" /></td>
            <td colspan="2">
                    <input id="Button1" class="btn_style"  type="button" value="展开"  onclick="expandAll(true)" />  
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <input id="Button2" class="btn_style"  type="button" value="收起"  onclick="expandAll(false);" />  
            </td> 
        </tr> 
        <tr><td><span id="span_role_name" class="showMsg" style="position:absolute;padding-left:80px"></span> 
            </td>
        </tr>
        <tr >
            <td align="right">备注：</td>
            <td>    
                <input  id="ROLE_DESCRIPTON"  type="text"/> 
                   <!--用于保存当前的角色名称-->
                <input id="hidROLE_NAME" type="hidden" value="null" /> 
            </td>
            <td colspan="2">    
                <div style="overflow: auto; height: 300px;width:300px">
                        <!--控件树对话框--> 
                        <ul id="ztree_category" class="ztree">
                        </ul> 
                </div>           
            </td>
        </tr> 
    </table>
    </div>
    <div class="pop_btn">
         <input id="BtnSave" type="button" class="common_btn_save mr30 mb25" value="" />
	     <input id="btnclose" type="button" class="common_btn_remove mb25" value=" "  />
     </div>
    </form>
</body>
</html>
